//
//  QFMultimedia.h 多媒体工具类,封了一些相册和视频的操作
//
//  Created by 祁小斐 on 14-5-29.
//  Copyright (c) 2014年 祁小斐. All rights reserved.
//

#import <Foundation/Foundation.h>


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark - 多媒体操作
@class ALAsset;
@class QFAsset;

@interface QFMultimedia : NSObject

/**
 * 判断是否JPG图片
 * @param data 源文件
 */
+ (BOOL) isJPEG:(NSData *)data;


/**
 * 判断是否PNG图片
 * @param data 源文件
 */
+ (BOOL)isPNG:(NSData *)data;
/**
 * 按比例缩小图片,或者压缩成Data
 * @param image   源图
 * @param ratio   尺寸缩小比,范围 0-1
 * @param quality 压缩质量比,范围 0-1
 */
+ (UIImage *) compress:(UIImage *)image ratio:(CGFloat)ratio;
+ (NSData *)  compress:(UIImage *)image ratio:(CGFloat)ratio quality:(CGFloat)quality;


typedef void(^WriteImageToPhotosAlbumBlock)(UIImage *image,NSError *error,void *contextInfo);
typedef void(^WriteVideoToPhotosAlbumBlock)(NSString *videoPath,NSError *error,void *contextInfo);
/**
 * 保存图片或视频到相册
 * @param image 源图片 videoPath 源视频地址
 * @param block 回调
 */
- (void) writeImageToPhotosAlbum:(UIImage *)image usingBlock:(WriteImageToPhotosAlbumBlock)block;
- (void) writeVideoToPhotosAlbum:(NSString *)videoPath usingBlock:(WriteVideoToPhotosAlbumBlock)block;


typedef NS_ENUM(NSInteger, QFFileType) {
    QFFileTypeALL   = 0, // 获取相册中所有文件
    QFFileTypeImage = 1, // 获取相册中图片
    QFFileTypeVideo = 2, // 获取相册中视频
};

typedef void(^FindAFileBlock)(QFAsset *entity);
typedef void(^WriteCompleteBlock)(NSError *err);
typedef void(^ProgressBlock)(float progress);

/**
 * 遍历相册，每找到一个文件，触发一次block回调
 */
- (void) traversePhotosAlbum:(QFFileType)fileType findAFile:(FindAFileBlock)block;

/**
 * 拷贝文件
 */
- (void) writeFileWithURL:(NSURL *)url toPath:(NSString *)path progressBlock:(ProgressBlock)progressBlock completeBlock:(WriteCompleteBlock)completeBlock;

@end


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark - 实体

@interface QFAsset : NSObject

@property (nonatomic, assign) BOOL isExist;            // 已存在标识,初始值为NO

@property (nonatomic, retain) NSURL *url;              // url
@property (nonatomic, retain) NSString *fileID;        // 唯一标识
@property (nonatomic, assign) long long size;          // 字节数
@property (nonatomic, retain) NSString *fileName;      // 文件名
@property (nonatomic, retain) NSDate   *createDate;    // 拍摄日期
@property (nonatomic, retain) NSString *duration;      // 视频时长 (图片为0)
@property (nonatomic, retain) UIImage  *thumbnail;     // 缩略图

@end





